<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.9.1"/>
<title>RaftLib: Schedule Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { init_search(); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">RaftLib
   &#160;<span id="projectnumber">0.3a</span>
   </div>
   <div id="projectbrief">C++ Stream Processing Template Library</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.9.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
      <li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-static-methods">Static Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="class_schedule-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">Schedule Class Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
</div><!--header-->
<div class="contents">
<div class="dynheader">
Inheritance diagram for Schedule:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="class_schedule__inherit__graph.svg" width="262" height="118"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<div class="dynheader">
Collaboration diagram for Schedule:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="class_schedule__coll__graph.svg" width="160" height="134"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:ad88c01f0ebf0c2f3bfa3ca2fe7ca3e8f"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#ad88c01f0ebf0c2f3bfa3ca2fe7ca3e8f">Schedule</a> (<a class="el" href="class_map.html">Map</a> &amp;map)</td></tr>
<tr class="separator:ad88c01f0ebf0c2f3bfa3ca2fe7ca3e8f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4806b985197d35c00b9e707c0ed87998"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#a4806b985197d35c00b9e707c0ed87998">~Schedule</a> ()</td></tr>
<tr class="separator:a4806b985197d35c00b9e707c0ed87998"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab6ad5540ecdef6b472b4e8242a47c4ee"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#ab6ad5540ecdef6b472b4e8242a47c4ee">start</a> ()=0</td></tr>
<tr class="separator:ab6ad5540ecdef6b472b4e8242a47c4ee"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5180032a0c2135507859ccf2a4eea1ab"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#a5180032a0c2135507859ccf2a4eea1ab">init</a> ()</td></tr>
<tr class="separator:a5180032a0c2135507859ccf2a4eea1ab"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6a722f6e76c8b8dc67874d9974b6d641"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#a6a722f6e76c8b8dc67874d9974b6d641">scheduleKernel</a> (<a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *const kernel)</td></tr>
<tr class="separator:a6a722f6e76c8b8dc67874d9974b6d641"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:acf28b4a4231e693585751a035873615c"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#acf28b4a4231e693585751a035873615c">kernelRun</a> (<a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *const kernel, volatile bool &amp;finished, jmp_buf *gotostate=nullptr, jmp_buf *kernel_state=nullptr)</td></tr>
<tr class="separator:acf28b4a4231e693585751a035873615c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:addff3f2e72caab274963cc888faa2f6b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="addff3f2e72caab274963cc888faa2f6b"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>handleSchedule</b> (<a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *const kernel)=0</td></tr>
<tr class="separator:addff3f2e72caab274963cc888faa2f6b"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-static-methods"></a>
Static Protected Member Functions</h2></td></tr>
<tr class="memitem:a85de3d48407aa378ccc86a4a4206b32a"><td class="memItemLeft" align="right" valign="top">static raft::kstatus&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#a85de3d48407aa378ccc86a4a4206b32a">checkSystemSignal</a> (<a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *const kernel, void *data, <a class="el" href="class_system_signal_handler.html">SystemSignalHandler</a> &amp;<a class="el" href="class_schedule.html#ad248e99611a87776fb411836cd46a603">handlers</a>)</td></tr>
<tr class="separator:a85de3d48407aa378ccc86a4a4206b32a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a5167d622689a34ea5f3a065304295521"><td class="memItemLeft" align="right" valign="top">static raft::kstatus&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#a5167d622689a34ea5f3a065304295521">quitHandler</a> (<a class="el" href="class_f_i_f_o.html">FIFO</a> &amp;fifo, <a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *kernel, const raft::signal signal, void *data)</td></tr>
<tr class="separator:a5167d622689a34ea5f3a065304295521"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3bf10fd9419c58849d7be98336dc0aff"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="a3bf10fd9419c58849d7be98336dc0aff"></a>
static void&#160;</td><td class="memItemRight" valign="bottom"><b>invalidateOutputPorts</b> (<a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *kernel)</td></tr>
<tr class="separator:a3bf10fd9419c58849d7be98336dc0aff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac23de3dd63554401fd0d8d23b60eecfa"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#ac23de3dd63554401fd0d8d23b60eecfa">kernelHasInputData</a> (<a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *kernel)</td></tr>
<tr class="separator:ac23de3dd63554401fd0d8d23b60eecfa"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2e2035e0c0666054f8401ad2b3792854"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#a2e2035e0c0666054f8401ad2b3792854">kernelHasNoInputPorts</a> (<a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *kernel)</td></tr>
<tr class="separator:a2e2035e0c0666054f8401ad2b3792854"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:ad248e99611a87776fb411836cd46a603"><td class="memItemLeft" align="right" valign="top"><a class="el" href="class_system_signal_handler.html">SystemSignalHandler</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#ad248e99611a87776fb411836cd46a603">handlers</a></td></tr>
<tr class="separator:ad248e99611a87776fb411836cd46a603"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a448b0d48e656f94db65a70cedd8eed"><td class="memItemLeft" align="right" valign="top">kernelkeeper &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="class_schedule.html#a1a448b0d48e656f94db65a70cedd8eed">kernel_set</a></td></tr>
<tr class="separator:a1a448b0d48e656f94db65a70cedd8eed"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad4c895eb77d8287a9a19215cced7af7b"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="ad4c895eb77d8287a9a19215cced7af7b"></a>
kernelkeeper &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>source_kernels</b></td></tr>
<tr class="separator:ad4c895eb77d8287a9a19215cced7af7b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aebf2c26334eae760032d82a016898043"><td class="memItemLeft" align="right" valign="top"><a class="anchor" id="aebf2c26334eae760032d82a016898043"></a>
kernelkeeper &amp;&#160;</td><td class="memItemRight" valign="bottom"><b>dst_kernels</b></td></tr>
<tr class="separator:aebf2c26334eae760032d82a016898043"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="ad88c01f0ebf0c2f3bfa3ca2fe7ca3e8f"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">Schedule::Schedule </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="class_map.html">Map</a> &amp;&#160;</td>
          <td class="paramname"><em>map</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p><a class="el" href="class_schedule.html">Schedule</a> - base constructor takes a map object so that all sub-classes can access some of the map features through the schedule sub-class accessors. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">map</td><td>- <a class="el" href="class_map.html">Map</a>&amp; </td></tr>
  </table>
  </dd>
</dl>

<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 0 -->
</div>
</div>
</p>

</div>
</div>
<a class="anchor" id="a4806b985197d35c00b9e707c0ed87998"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">Schedule::~Schedule </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>destructor, takes care of cleanup </p>
<p>nothing to do at the moment </p>

</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a class="anchor" id="a85de3d48407aa378ccc86a4a4206b32a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">raft::kstatus Schedule::checkSystemSignal </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *const&#160;</td>
          <td class="paramname"><em>kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>data</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="class_system_signal_handler.html">SystemSignalHandler</a> &amp;&#160;</td>
          <td class="paramname"><em>handlers</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>checkSystemSignal - check the incomming streams for the param kernel for any system signals, if there is one then consume the signal and perform the appropriate action. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">kernel</td><td>- <a class="el" href="classraft_1_1kernel.html">raft::kernel</a> </td></tr>
    <tr><td class="paramname">data</td><td>- void*, use this if any further info is needed in future implementations of handlers </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>raft::kstatus, proceed unless a stop signal is received </dd></dl>
<p>TODO, right now there is special behavior for term signal only, what should we do with others? Need to decide that.</p>

<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="class_schedule_a85de3d48407aa378ccc86a4a4206b32a_cgraph.svg" width="408" height="54"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</p>

</div>
</div>
<a class="anchor" id="a5180032a0c2135507859ccf2a4eea1ab"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void Schedule::init </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>init - call to pre-process all kernels, this function is called by the map object befure calling start. </p>
<p>default, do nothing </p>

</div>
</div>
<a class="anchor" id="ac23de3dd63554401fd0d8d23b60eecfa"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Schedule::kernelHasInputData </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *&#160;</td>
          <td class="paramname"><em>kernel</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>kernelHasInputData - check each input port for available data, returns true if any of the input ports has available data. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">kernel</td><td>- <a class="el" href="classraft_1_1kernel.html">raft::kernel</a> </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>bool - true if input data available. </dd></dl>
<p>only output ports, keep calling till exits </p>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="class_schedule_ac23de3dd63554401fd0d8d23b60eecfa_icgraph.svg" width="611" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</p>

</div>
</div>
<a class="anchor" id="a2e2035e0c0666054f8401ad2b3792854"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Schedule::kernelHasNoInputPorts </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *&#160;</td>
          <td class="paramname"><em>kernel</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>kernelHasNoInputPorts - pretty much exactly like the function name says, if the param kernel has no valid input ports (this function assumes that <a class="el" href="class_schedule.html#ac23de3dd63554401fd0d8d23b60eecfa">kernelHasInputData()</a> has been called and returns false before this function is called) then it returns true.  kernel - <a class="el" href="classraft_1_1kernel.html">raft::kernel</a>* </p><dl class="section return"><dt>Returns</dt><dd>bool - true if no valid input ports avail </dd></dl>
<p>assume data check is already complete </p>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="class_schedule_a2e2035e0c0666054f8401ad2b3792854_icgraph.svg" width="600" height="54"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</p>

</div>
</div>
<a class="anchor" id="acf28b4a4231e693585751a035873615c"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">bool Schedule::kernelRun </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *const&#160;</td>
          <td class="paramname"><em>kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">volatile bool &amp;&#160;</td>
          <td class="paramname"><em>finished</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">jmp_buf *&#160;</td>
          <td class="paramname"><em>gotostate</em> = <code>nullptr</code>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">jmp_buf *&#160;</td>
          <td class="paramname"><em>kernel_state</em> = <code>nullptr</code>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>kernelRun - all the logic necessary to run a single kernel successfully. Any additional signal handling should be handled by this function as its the only one that will be universally called by the scheduler. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">kernel</td><td>- <a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *const object, non-null kernel </td></tr>
    <tr><td class="paramname">finished</td><td>- volatile bool - function sets to true when done. </td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>true if run with no need for jmp_buf, false if the scheduler needs to run again with the kernel_state </dd></dl>
<p>must recheck data items again after port valid check, there could have been a push between these two conditional statements.</p>

<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 1 -->
</div>
</div>
</p>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 2 -->
</div>
</div>
</p>

</div>
</div>
<a class="anchor" id="a5167d622689a34ea5f3a065304295521"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">raft::kstatus Schedule::quitHandler </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="class_f_i_f_o.html">FIFO</a> &amp;&#160;</td>
          <td class="paramname"><em>fifo</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *&#160;</td>
          <td class="paramname"><em>kernel</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const raft::signal&#160;</td>
          <td class="paramname"><em>signal</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">void *&#160;</td>
          <td class="paramname"><em>data</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>quiteHandler - performs the actions needed when a port sends a quite signal (normal termination), this is most likely due to the end of data. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">fifo</td><td>- <a class="el" href="class_f_i_f_o.html">FIFO</a>&amp; that sent the signal </td></tr>
    <tr><td class="paramname">kernel</td><td>- <a class="el" href="classraft_1_1kernel.html">raft::kernel</a>* </td></tr>
    <tr><td class="paramname">signal</td><td>- raft::signal </td></tr>
    <tr><td class="paramname">data</td><td>- void*, vain attempt to future proof </td></tr>
  </table>
  </dd>
</dl>
<p>NOTE: This should be the only action needed currently, however that may change in the futre with more features and systems added.</p>

<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><iframe scrolling="no" frameborder="0" src="class_schedule_a5167d622689a34ea5f3a065304295521_cgraph.svg" width="328" height="38"><p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p></iframe></div>
</div>
</p>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 3 -->
</div>
</div>
</p>

</div>
</div>
<a class="anchor" id="a6a722f6e76c8b8dc67874d9974b6d641"></a>
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void Schedule::scheduleKernel </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classraft_1_1kernel.html">raft::kernel</a> *const&#160;</td>
          <td class="paramname"><em>kernel</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div><div class="memdoc">
<p>scheduleKernel - adds the kernel "kernel" to the schedule, ensures that it is run. Other than that there are no guarantees for its execution. It is purely virtual in its implementation. Before you drop in a kernel, it better be ready to go..all allocations should be complete. </p><dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">kernel</td><td>- <a class="el" href="classraft_1_1kernel.html">raft::kernel</a>* </td></tr>
  </table>
  </dd>
</dl>
<p>NOTE: The kernel param should be ready to rock, we just need to add it here. The data structures xx_kernels all expect a fully ready kernel, well the threads monitoring the system do at least and this is one. What we need to do to kick off the execution is add it to the handleSchedule virtual function which is implemented by each scheduler.</p>

<p><div class="dynheader">
Here is the call graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 4 -->
</div>
</div>
</p>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><!-- SVG 5 -->
</div>
</div>
</p>

</div>
</div>
<a class="anchor" id="ab6ad5540ecdef6b472b4e8242a47c4ee"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void Schedule::start </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>start - called to start execution of all kernels. Implementation specific so it is purely virtual. </p>

<p>Implemented in <a class="el" href="classpool__schedule.html#ab67558a44404e42ba032f799c0f424a7">pool_schedule</a>, and <a class="el" href="classsimple__schedule.html#ad60a7608111e011d0c04f6ac566cfd8c">simple_schedule</a>.</p>

</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a class="anchor" id="ad248e99611a87776fb411836cd46a603"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="class_system_signal_handler.html">SystemSignalHandler</a> Schedule::handlers</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>signal handlers </p>

</div>
</div>
<a class="anchor" id="a1a448b0d48e656f94db65a70cedd8eed"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">kernelkeeper&amp; Schedule::kernel_set</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>kernel set </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li><a class="el" href="schedule_8hpp_source.html">schedule.hpp</a></li>
<li>schedule.cpp</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Mon Oct 12 2015 12:16:50 for RaftLib by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.9.1
</small></address>
</body>
</html>
